package cl.sodexo.com.dao;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.apache.log4j.Logger;

import cl.sodexo.com.dto.Perfil;
import cl.sodexo.com.dto.Usuario;
import cl.sodexo.com.utils.PasswordManager;

public class UsuarioDAO extends AbstractDAO{
	
	private static final Logger logger = Logger.getLogger(UsuarioDAO.class);
	
	public Usuario getUsuario(Usuario user) throws SQLException{
		Usuario usuario		= null;
		Perfil perfil		= null;
		Connection con		= null;
		ResultSet rs		= null;
		PreparedStatement ps= null;
		StringBuilder sql	= null;
		
		try{
			sql = new StringBuilder();
			sql.append("SELECT u.idUsuario AS idUsuario, u.username AS username, u.nombre AS nombre, ");
			sql.append("u.perfilUsuario AS idPerfil, p.descripcionPerfil AS glosaPerfil ");
			sql.append("FROM sodexo.usuario u INNER JOIN sodexo.perfil p ON u.perfilUsuario = p.idperfil ");
			sql.append("WHERE u.username = ? AND u.password = ? ");
			
			con = super.loadConnection();
			ps	= con.prepareStatement(sql.toString());
			ps.setString(1, user.getUsername());
			ps.setString(2, PasswordManager.encrypt(user.getPassword()));
			rs	= ps.executeQuery();
			
			if(rs.next()){
				usuario = new Usuario();
				usuario.setIdUsuario(rs.getString("idUsuario"));
				usuario.setUsername(rs.getString("username"));
				usuario.setNombre(rs.getString("nombre"));
				perfil	= new Perfil();
				perfil.setIdPerfil(rs.getString("idPerfil"));
				perfil.setDescripcion(rs.getString("glosaPerfil"));
				usuario.setPerfil(perfil);
			}
			
		}catch (Exception e) {
			logger.error(e, e);
		}finally{
			super.closeAll(con, ps, rs);
		}
		
		return usuario;
	}
	
	/**
	 * @param idPerfil
	 * @return
	 * @throws SQLException
	 */
	public ArrayList<Usuario> listUsuariosPerfil(String idPerfil) throws SQLException{
		ArrayList<Usuario> usuarios = new ArrayList<Usuario>();
		Connection con		= null;
		PreparedStatement ps= null;
		Usuario userTO		= null;
		ResultSet rs		= null;
		StringBuilder sql	= null;
		
		try{
			sql = new StringBuilder();
			sql.append("SELECT idUsuario, username, nombre ");
			sql.append("FROM sodexo.usuario WHERE perfilUsuario = ?");
			
			con = super.loadConnection();
			ps	= con.prepareStatement(sql.toString());
			ps.setBigDecimal(1, new BigDecimal(idPerfil));
			rs	= ps.executeQuery();
			
			while(rs.next()){
				userTO = new Usuario();
				userTO.setIdUsuario(rs.getString("idUsuario"));
				userTO.setUsername(rs.getString("username"));
				userTO.setNombre(rs.getString("nombre"));
				usuarios.add(userTO);
			}
			
		}catch (Exception e) {
			logger.error(e, e);
		}finally{
			super.closeAll(con, ps, rs);
		}
		
		
		return usuarios;
	}

}
